package com.example.JavaWebApi.core.mybatisplusextention;
import lombok.Data;
import lombok.SneakyThrows;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;

/**
 *@program: wsbgt7-web-api
 *@description: 数据库种类
 *@author: yang ze
 *@create: 2022-03-08 10:51
 */
public enum DataBaseType {
    base(0,"base",Arrays.asList(0)),
    wb(1,"wb",Arrays.asList(3,4)),
    zyk(2,"zyk",Arrays.asList(1));
    private int code;
    private String name;
    private List<Integer> catalogType;
    DataBaseType(int code,String name,List<Integer> catalogType){
        this.code=code;
        this.name=name;
        this.catalogType=catalogType;
    }
    /**
     * Description: 根据code获取数据库类型
     * @param code 定义的数据库code
     * @return com.example.JavaWebApi.core.mybatisplusextention.DataBaseType
     * @author 杨泽
     * @date 2022/3/8 11:01
     */
    @SneakyThrows
    public static DataBaseType getTypeByCode(int code){
        Optional<DataBaseType> optional= Arrays.stream(DataBaseType.values()).filter(t->t.code==code).findFirst();
        if(optional.isPresent()){
            return optional.get();
        }
        else {
            throw new Exception("未定义的数据库！,请检查参数!");
        }
    }
    /**
     * Description: 根据产品id获取默认的分类等级
     * @param code 产品id
     * @return int
     * @author 杨泽
     * @date 2022/3/18 15:45
     */
    @SneakyThrows
    public static int getDefaultCatalogTypeByCode(int code){
        Optional<DataBaseType> optional= Arrays.stream(DataBaseType.values()).filter(t->t.code==code).findFirst();
        if(optional.isPresent()){
            return optional.get().catalogType.get(0);
        }
        else {
            throw new Exception("未定义的数据库！,请检查参数!");
        }
    }
    /**
     * Description: 根据任意条件获取枚举
     * @param predicate 表达式条件
     * @return com.example.JavaWebApi.core.mybatisplusextention.DataBaseType
     * @author 杨泽
     * @date 2022/3/8 11:02
     */
    @SneakyThrows
    public static DataBaseType getTypeByCondition(Predicate<DataBaseType> predicate){
        Optional<DataBaseType> optional= Arrays.stream(DataBaseType.values()).filter(predicate).findFirst();
        if(optional.isPresent()){
            return optional.get();
        }
        else {
            throw new Exception("未定义的数据库！,请检查参数!");
        }
    }
    public int getCode(){
        return this.code;
    }
    public String getName(){
        return this.name;
    }
    public List<Integer> getCatalogType(){return this.catalogType;}
}
